//
//  HomeTableViewController.swift
//  sinaDemo
//
//  Created by mac on 15/12/12.
//  Copyright © 2015年 zhouxubin. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

// MARK: 重用标示符
let ID = "status_cell"

class HomeTableViewController: BaseTableViewController {
    
    // 模型属性, 懒加载模型数组
    private lazy var statuses = [Status]()

    override func viewDidLoad() {
        super.viewDidLoad()

//        view.backgroundColor = randomColor
        if !isLogin { // 如果没有登录,显示访客页面
            visitor?.setVisitor("登录后，别人评论你的微博，发给你的消息，都会在这里收到通知", imageName: nil)
            return
        }
        
        // 注册cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: ID)
        
        // 预估行高
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 300
        
        // 请求数据
        getData()
        
        // 集成刷新控件 ,自定义刷新控件
        tableView.addSubview(refreshView)
        
        refreshView.addTarget(self, action: "getData", forControlEvents: UIControlEvents.ValueChanged)
        // 上拉刷新的控件
        tableView.tableFooterView = indicater
    }
    
    @objc private func getData() {
        SVProgressHUD.showWithStatus("正在拼命加载中...")
        // 下拉就加载更多数据
        // 请求比since_id大得微博数据
        var since_id : Int64 = 0
        var max_id: Int64 = 0
        
        if indicater.isAnimating() { // 如果正在动画,说明是上拉刷新
            max_id = statuses.last?.id ?? 0
        }else { // 说明是下拉刷新
            since_id = statuses.first?.id ?? 0
        }
        
        StatusListViewModel.loadData(since_id, max_id: max_id) { (statuses) -> () in
            // 结束刷新
            self.refreshView.endRefresh()
            
            guard let list = statuses else {
                return
            }
            
            // 判断since_id是否大于0
            if since_id > 0 { // 下拉刷新
                self.statuses = list + self.statuses
            }else if max_id > 0 { // 上拉刷新
                self.statuses += list
                // 请求完数据之后应该停止动画
                self.indicater.stopAnimating()
            }else { // 首次加载
                self.statuses = list
            }
            
            //刷新表格
            self.tableView.reloadData()
        }
    }

    // MARK: - Table view data source
    // 以后这里注意一定需要写,不然后面的方法都不会调用
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return statuses.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // 取出模型
        let status = statuses[indexPath.row]
        let cell = tableView.dequeueReusableCellWithIdentifier(ID, forIndexPath: indexPath) as! StatusCell
        cell.status = status
        // 判断是否滑动到了最后一行
        if indexPath.row == statuses.count - 1 { // 滑动到了最后一行
            indicater.startAnimating()
            // 加载数据
            getData()
        }
//        cell.textLabel?.text = status.text
        return cell
    }
    
    // MARK: 懒加载
    private lazy var indicater: UIActivityIndicatorView = {
        let indicater = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
        
        return indicater
    }()
    
    private lazy var refreshView: XBRefreshView = XBRefreshView()

}
